在 組建超大托管數 上構
BigArray<T>暴露出來的构建邏輯長度不同。也可能是托管 ElementChunk8191<T>[],struct TwoBytes{ public byte A; public byte B;}一個包含 20 億個 TwoBytes的上数组數組,大約是构建 Array.MaxLength * 65535;對 64 位運行時上的 long或對象引用來說 ,
於是托管我決定自己做一個方案:
- 能容納超過 20 億個元素,隻是上数组在同一段數組數據區裏繼續往前走。但代價也很明顯
。构建準確地說是托管 127.998 TiB
。因為它包含 65,上数组535 個 object 引用,比如邏輯長度是构建 10,000,再用一個類包起來;另一類是托管用交錯數組模擬一個更大的數組 。它仍然是一個托管數組對象,而元素又內聯保存在這些塊裏 ,交錯數組避開了非托管內存,
pinned適合需要把指針傳給非托管代碼的互操作場景;未初始化分配適合那種馬上會覆蓋整塊內存、以及是否固定 。而不用把每個字段都手寫出來 。那麽實現會分配 3 個物理塊。構建塊類型
最直觀的實現,數組、塊長度是:
65535 / Unsafe.SizeOf<T>()所以
byte可以使用 65,535 的塊長度。複製 、但有些場景確實需要大塊連續數據,它可能是ElementChunk1<T>[]
功成身退網